#include<bits/stdc++.h>
using namespace std;

namespace Solve{
	typedef long long ll;
	const int N=1000010,mod=1e9+7;
	inline void Add(int&x,int y){
		x=(x+y>=mod?x+y-mod:x+y);
	}
	inline void Sub(int&x,int y){
		x=(x-y<0?x-y+mod:x-y);
	}
	int qmi(int a,int b){
		int r=1;
		for(;b;b>>=1){
			if(b&1)r=(ll)r*a%mod;
			a=(ll)a*a%mod;
		}
		return r;
	}
	int n,k,a[N];
	
	int jc[N],ny[N];
	void prepare_C(int nn){
		jc[0]=1;
		for(int i=1;i<=nn;i++)jc[i]=(ll)jc[i-1]*i%mod;
		ny[nn]=qmi(jc[nn],mod-2);
		for(int i=nn;i;i--)ny[i-1]=(ll)ny[i]*i%mod;
	}
	int C(int x,int y){
		if(x<y||y<0)return 0;
		return (ll)jc[x]*ny[x-y]%mod*ny[y]%mod;
	}
	int nC(int x,int y){
		if(x<y||y<0)return 0;
		return (ll)ny[x]*jc[x-y]%mod*jc[y]%mod;
	}
	
	int f[N],g[N],nyn[N];
	void main(){
		cin>>n>>k;
		for(int i=1;i<=n;i++)cin>>a[i];
		
		prepare_C(n);
		nyn[1]=1;
		for(int i=2;i<=n;i++)nyn[i]=mod-(ll)(mod/i)*nyn[mod%i]%mod;
		
		g[0]=1;
		for(int i=1;i<=n;i++){
			g[i]=(ll)(i-2+mod)*g[i-1]%mod*nyn[i]%mod;
		}
		
		for(int i=0;i<=k;i++){
			int p=(ll)C(n-1-i-1,k-i)*nC(n-1,k)%mod;
			f[i]=(ll)p*g[i]%mod;
			
			if(i)Add(f[i],f[i-1]);
		}
		
		int ans=0;
		for(int i=1;i<=n;i++){
			int res=0;
			if(i>1){
				Add(res,f[min(k,i-2)]);
			}
			if(i-1<=k){
				int p=(ll)C(n-1-(i-1),k-(i-1))*nC(n-1,k)%mod;
//				cerr<<"P "<<p<<' '<<n-1-(i-1)<<' '<<k-(i-1)<<' '<<C(n-1-i,k-(i-1))<<' '<<g[i-1]<<'\n';
				Add(res,(ll)p*g[i-1]%mod);
			}
//			cerr<<"I "<<i<<' '<<res<<'\n';
			Add(ans,(ll)res*a[i]%mod);
		}
		cout<<ans;
	}
}
signed main(){
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	Solve::main();
	
	return 0;
}
